home
***
CD-ROM
|
disk
|
other
***
search
/
SGI ONC3 NFS v2
/
SGI ONC3 NFS v2.iso
/
dist6.3
/
nfs.idb
/
var
/
boot
/
.dl_inst.z
/
.dl_inst
(
.txt
)
Wrap
Text File
|
1996-11-21
|
8KB
|
377 lines
#! /bin/sh
#ident "$Revision: 1.68 $"
#
#
# Following variables should be read from file /var/boot/$RELEASE.dat
#
#DISKLESS="/usr/tmp"
#CLROOT="$DISKLESS/$HOST"
#SHAREHOST="$HOSTNAME"
#SHARE="$DISKLESS/$CLASS"
#SWAP="$DISKLESS/swap/$HOST"
#SWAPSIZE="10m"
#NIS="yes"
#DLMAJOR=18 A long time ago NFS used its own major number
#
# Following variables should be read from file /var/boot/$CLASS.dat
#
#GFXBOARD="ECLIPSE"
#CPUBOARD="IP6"
#CPUARCH="R3000"
#VIDEO=""
#
# The following variables are "server-relative"
#
DIR="/var/boot"
MKFILE="/usr/sbin/mkfile"
#
# The following variables are "client-relative"
#
BOOT=$CLROOT/var/sysgen/boot
SHELL="/sbin/sh"
NIS_DIR="/var/yp"
NIS_EXEC_DIR="/usr/sbin"
SGI_CC=-cckr; export SGI_CC
NFS_INSTALL="no"
PATH="/usr/sbin:/usr/bsd:/sbin:/usr/bin:/bin:/etc:/usr/etc:/usr/bin/X11"
export PATH
INST="${INSTALL_TOOL:-/usr/sbin/inst}"
case $INST in
*swmgr )
INST_OPT="-Vbackground:off"
;;
*inst)
INST_OPT=""
;;
*)
echo "Unknown install mechanism"
exit 1
;;
esac
#
#
CMDNAME=$0
TARGET=""
#
# Run exportfs on server
#
# No arguments
#
run_exportfs()
{
if [ -x /usr/etc/exportfs ]; then
/usr/etc/exportfs $1
case $? in
0)
;;
*)
echo "ATTENTION: fix /etc/exports and rerun exportfs !"
echo "ATTENTION: fix /etc/exports and rerun exportfs !" >> /dev/console
exit 1
;;
esac
else
echo "ATTENTION: /usr/etc/exportfs does not exist !"
echo "ATTENTION: /usr/etc/exportfs does not exist !" >> /dev/console
exit 1
fi
}
#
# Create /etc/exports if it does not exist.
#
# No arguments
#
create_exports()
{
if [ ! -f /etc/exports ]; then
> /etc/exports
chmod 644 /etc/exports
fi
}
#
# Update client exports on server
#
# Any swap partitions must be exported with the wsync flag. This will force
# accesses to NFS swap to be synchronous. Without this, we have a good chance
# on a heavily loaded client system to have random programs core dump when a
# server recovers after a crash.
#
# arguments: 1 -- export directory.
# 2 -- class/client KEY.
# 3 -- swap/noswap argument
#
export_client_dir()
{
if [ "$NFS_INSTALL" = "yes" ]; then
echo "\nPlease export this entry on the NFS server: "
if [ "$3" = "swap" ]; then
echo " $1 -rw=$2,wsync,access=$2,root=$2 #host=$2"
else
echo " $1 -rw=$2,access=$2,root=$2 #host=$2"
fi
return;
fi
create_exports
# Add export line to /etc/exports
grep $1 /etc/exports >/dev/null 2>&1
if [ $? -eq 1 ]; then
if [ "$3" = "swap" ]; then
echo "$1 -rw=$2,wsync,access=$2,root=$2 #host=$2" \
>> /etc/exports
else
echo "$1 -rw=$2,access=$2,root=$2 #host=$2" \
>> /etc/exports
fi
fi
run_exportfs $1
}
#
# Update shareable exports on server
#
# arguments: 1 -- export directory.
# 2 -- export privileges
# 3 -- class/client KEY.
#
export_share_dir()
{
if [ $2 != "rw" -a $2 != "ro" ]; then
echo "\nIllegal flag to export_share_dir"
exit
fi
if [ "$NFS_INSTALL" = "yes" ]; then
echo "\nPlease export this entry on the NFS server: "
echo " $1 -$2 #class=$3"
return;
fi
create_exports
# Add export line to /etc/exports
grep $1 /etc/exports >/dev/null 2>&1
if [ $? -eq 1 ]; then
echo "$1 -$2 #class=$3" >> /etc/exports
fi
run_exportfs $1
}
#
# Unexports directories on server.
#
# Arguments: 1 -- type
# 2 -- directory
# 3 -- key
#
unexport_dir()
{
if [ "$1" != "class" -a "$1" != "host" ]; then
echo "Illegal type to unexport_dir"
exit 1;
fi
if [ "X$2" = "X" ]; then
echo "No directory argument to unexport_dir";
exit 1;
fi
if [ ! -d "$2" ]; then
echo "Illegal directory argument to unexport_dir";
exit 1;
fi
if [ "X$3" = "X" ]; then
echo "No key argument to unexport_dir";
exit 1;
fi
if [ "X$NFS_INSTALL" = "Xyes" ]; then
echo "Please unexport the NFS server entry for: \c"
echo $3
rm -r $2
return
fi
if [ ! -f /etc/exports ]; then
echo "ATTENTION: /etc/exports does not exist !" >> /dev/console
echo "ATTENTION: /etc/exports does not exist !"
exit 1
fi
if [ -x /usr/etc/exportfs ]; then
/usr/etc/exportfs -u "$2" > /dev/null 2>&1
else
echo "ATTENTION: /usr/etc/exportfs does not exist !"
echo "ATTENTION: /usr/etc/exportfs does not exist !" >> /dev/console
exit 1
fi
if [ "$1" = "class" ]; then
grep -v "$2.*\#class=$3" /etc/exports > /etc/export.$$
else
grep -v "$2.*\#host=$3" /etc/exports > /etc/export.$$
fi;
rm -r $2
mv /etc/export.$$ /etc/exports
}
#
# poke_host
#
# Argument: 1 -- hostname.
# 2 -- NIS option.
# 3 -- TARGET.
#
# return: 0 -- host is neither CLASS not CLIENT.
# 1 -- host is not running.
# 2 -- host in running.
#
poke_host()
{
POKEHOST="$1";
POKENIS="$2";
POKETARGET="$3";
RETVAL=0;
if [ "$POKENIS" = "yes" ]; then
ypmatch "$POKEHOST" bootparams > /dev/null 2>&1;
if [ $? -eq 0 ]; then
RETVAL=1;
fi;
fi;
if [ "$NFS_INSTALL" = "yes" ]; then
return 1;
fi
if [ "$POKENIS" != "yes" -o "$RETVAL" -eq 0 ]; then
if [ ! -f /etc/bootparams ]; then
return 0;
fi
grep "$POKEHOST" /etc/bootparams | while read a_line; do
set $a_line;
if [ "$1" = "$POKEHOST" ]; then
return 1;
fi;
done
RETVAL=$?;
fi;
if [ "$POKETARGET" = "share" -o "$RETVAL" -eq 0 ]; then
return "$RETVAL";
fi
if [ `ping -s 56 -c 5 $POKEHOST | wc -l` -gt 6 ]; then
RETVAL=2;
fi
return "$RETVAL";
}
#
# poke_class
#
# Argument: 1 -- share tree.
# 2 -- NIS option.
# 3 -- ACTION.
# 4 -- CLASS.
#
# return: 0 -- continue
# 1 -- abort.
#
poke_class()
{
POKESHARE="$1";
POKENIS="$2";
POKEACT="$3";
POKECLASS="$4";
if [ "$POKENIS" = "yes" ]; then
ypcat bootparams | grep "share=${POKESHARE}" 2>&1 > /dev/null
if [ $? -eq 0 ]; then
echo "\nWARNING: Class $POKECLASS is still serving clients."
if [ "$POKEACT" = "delete" ]; then
echo "continue to delete $POKECLASS(Y/N)\07?\c"
else
echo "continue to update $POKECLASS(Y/N)\07?\c"
fi;
read CONF
if [ "$CONF" != "y" -a "$CONF" != "Y" ]; then
return 1;
fi;
echo "\nChecking clients status:\n"
ypcat -k bootparams | grep "share=${POKESHARE}" | while read a_line; do
set $a_line;
echo " $1 ... \c"
if [ `ping -s 56 -c 5 $1 | wc -l` -gt 6 ]; then
echo "UP";
else
echo "DOWN";
fi
done
echo "\nWARNING: clients will be out of sync. Clients which are UP may crash.\n"
return 0;
fi;
fi;
if [ "$NFS_INSTALL" = "yes" ]; then
echo "Warning: $POKECLASS may be active. Not checking server"
if [ "$POKEACT" = "delete" ]; then
echo "continue to delete $POKECLASS(Y/N)\07?\c"
else
echo "continue to update $POKECLASS(Y/N)\07?\c"
fi;
read CONF
if [ "$CONF" != "y" -a "$CONF" != "Y" ]; then
return 1;
fi
return 0;
fi
if [ ! -f /etc/bootparams ]; then
if [ "$POKEACT" = "delete" ]; then
return 1;
else
return 0;
fi;
fi
grep "share=${POKESHARE}" /etc/bootparams 2>&1 > /dev/null
if [ $? -ne 0 ]; then
return 0;
fi
echo "\nWARNING: Class $POKECLASS is still serving clients."
if [ "$POKEACT" = "delete" ]; then
echo "continue to delete $POKECLASS(Y/N)\07?\c"
else
echo "continue to update $POKECLASS(Y/N)\07?\c"
fi;
read CONF
if [ "$CONF" != "y" -a "$CONF" != "Y" ]; then
return 1;
fi;
echo "\nChecking client's status:\n"
grep "share=${POKESHARE}" /etc/bootparams | while read a_line; do
set $a_line;
echo " client $1 ... \c"
if [ `ping -s 56 -c 5 $1 | wc -l` -gt 6 ]; then
echo "UP";
else
echo "DOWN";
fi
done
echo "\nWARNING: clients will be out of sync. Clients which are UP may crash.\n"
return 0;
}